package com.egitim.cati.form;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
 
 
import javax.inject.Inject;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.util.value.ValueMap;
import com.egitim.bean.AnaGonderiBean;
import com.egitim.bean.EtiketBean;
import com.egitim.cati.EtiketQueryBean;
import com.egitim.model.AnaGonderi;
import com.egitim.model.Etiket;
import com.googlecode.htmlcompressor.compressor.HtmlCompressor;

import org.apache.commons.lang.StringUtils;
 	/**
     * Bu form, bir Rich Text Editör içeriyor.
     * Makâle türü gönderileri bu form aracılığı ile veritabanına kaydederiz.
     * @author Murat Hunoglu
     */


    public final class AnaGonderiForm extends Form<ValueMap>
    {
        /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
		/**
         * Constructor
         * 
         * @param id
         *            The name of this component
         */
     @Inject 
     AnaGonderiBean anaGonderiBean;
     Boolean halihazirdaEtiketVar=false;
      public AnaGonderiForm(final String id)
        {
      
            super(id, new CompoundPropertyModel<ValueMap>(new ValueMap()));
 
            add(new TextField<String>("title").setType(String.class));
            add(new TextArea<String>("text").setType(String.class));
            add(new TextField<String>("etiketString").setType(String.class));
        }

        /**
         * Show the resulting valid edit
         */
       
        @Override
        public final void onSubmit()
        {
            ValueMap values = getModelObject();

            // check if the honey pot is filled
            if (StringUtils.isNotBlank((String)values.get("comment")))
            {
                error("Caught a spammer!!!");
                return;
            }
            // Construct a copy of the edited comment
            AnaGonderi anaGonderi = new AnaGonderi();

            // Set date of comment to add
            anaGonderi.setCreatedAt(new Date());
            // Title
            String title=(String)values.get("title");
            anaGonderi.setTitle(title);
            
            anaGonderi.setText((String)values.get("text"));
             // Clear out the text component
            
            String html=anaGonderi.getText();
            HtmlCompressor compressor = new HtmlCompressor();
            compressor.setGenerateStatistics(true);
            anaGonderi.setText(compressor.compress(html));
            
            
            values.put("text", "");
            values.put("title", "");
            
            String etiketString=(String)values.get("etiketString");
            String[] etiketleriListeYap=etiketleriListeYap(etiketString);
            
          
            
            if(etiketleriListeYap.length>0){
                   ArrayList<Etiket> etiketListesi=  etiketleriGetir(etiketleriListeYap);	
            	  anaGonderi.setEtiketSet(etiketListesi);
            	  anaGonderiBean.setInstance(anaGonderi);
            	  if(halihazirdaEtiketVar){
            		    anaGonderiBean.merge();
            	  }else{
            		    anaGonderiBean.save();
            	  }
            		  
              
            	
            }
            
            
        }
        
        @Inject EtiketQueryBean etiketQueryBean;
    
        private   ArrayList<Etiket>   halihazirdakiEtiketleriGetir(String[] etiketleriListeYap){
        
             etiketQueryBean.crHalihazirdakiEtiketler(Arrays.asList(etiketleriListeYap));
        	 ArrayList<Etiket>   halihazirdakiEtiketler=( ArrayList<Etiket>)etiketQueryBean.getResultList();
        	 if(halihazirdakiEtiketler!=null && halihazirdakiEtiketler.size()!=0){
        		 halihazirdaEtiketVar=true;
        	 }
        	 
        	 return halihazirdakiEtiketler;
        }
        
       @Inject EtiketBean etiketBean;
       private   ArrayList<Etiket>   etiketleriGetir(String[] etiketleriListeYap) {
		    
		       ArrayList<Etiket> etiketListesi=new ArrayList<Etiket>();
		        
		       etiketListesi=halihazirdakiEtiketleriGetir(etiketleriListeYap);
		       
		       Set<String> etiketAdlariSeti=new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
		       
		       for (int i = 0; i < etiketListesi.size(); i++) {
				etiketAdlariSeti.add(etiketListesi.get(i).getText());
			  }
		       
		        
		       
		       
		       for (int i = 0; i < etiketleriListeYap.length; i++) {
		    	   
		    	   String id=etiketleriListeYap[i];
		    	   
		    	   if(!etiketAdlariSeti.contains(id)){
		    	   Etiket etiket;
		    	    	  etiket=new Etiket();
				    	  etiket.setText(id);	
				    	  etiketListesi.add(etiket);
		    	   }
		    	     
			}
		       
		      
		     return etiketListesi;   
		       
			
		}

		String[]  etiketleriListeYap(String etiketString){
        	 String[] etiketleriListeYap={};
        	 
        	 etiketleriListeYap= etiketString.split(",");
        	 for (int i = 0; i < etiketleriListeYap.length; i++) {
				etiketleriListeYap[i]=(etiketleriListeYap[i]+"").trim();
			}
        	 return etiketleriListeYap;
        }
    }
